import config from '@/config/app.js'

/**
 * 小程序用户登录（手机号授权登录）
 * @param {Object} data - 登录参数
 * @param {string} data.code - 微信登录code
 * @param {string} data.encryptedData - 手机号加密数据
 * @param {string} data.iv - 解密向量
 * @param {Object} data.userInfo - 用户信息（可选）
 * @returns {Promise}
 */
export function login(data) {
	return new Promise((resolve, reject) => {
		// 参数验证
		if (!data.code) {
			reject(new Error('缺少微信登录code'));
			return;
		}
		
		// if (!data.encryptedData || !data.iv) {
		// 	reject(new Error('缺少手机号授权数据'));
		// 	return;
		// }
		
		// 增加请求开始时间，用于超时检测
		const startTime = Date.now();
		console.log('开始登录请求，code:', data.code.substring(0, 10) + '...');
		
		uni.request({
			url: `${config.AI_HTTP_REQUEST_URL}/auth/login`,
			method: 'POST',
			data: data,
			header: {
				'Content-Type': 'application/json'
			},
			timeout: 15000, // 15秒超时
			success: (res) => {
				const duration = Date.now() - startTime;
				console.log(`登录接口响应 (耗时${duration}ms):`, res);
				
				if (res.statusCode === 200) {
					resolve(res.data)
				} else {
					// 处理HTTP错误状态码
					const error = {
						statusCode: res.statusCode,
						message: res.data?.message || `HTTP ${res.statusCode} 错误`,
						code: res.data?.code || res.statusCode,
						duration: duration
					};
					console.error('登录接口HTTP错误:', error);
					reject(error);
				}
			},
			fail: (err) => {
				const duration = Date.now() - startTime;
				console.error(`登录接口请求失败 (耗时${duration}ms):`, err);
				
				// 优化错误信息
				let errorMessage = '网络连接失败';
				if (err.errMsg) {
					if (err.errMsg.includes('timeout')) {
						errorMessage = '请求超时，请检查网络连接';
					} else if (err.errMsg.includes('fail')) {
						errorMessage = '网络请求失败，请重试';
					} else {
						errorMessage = err.errMsg;
					}
				}
				
				reject({
					...err,
					message: errorMessage,
					duration: duration
				});
			}
		})
	})
}

/**
 * 获取用户信息
 * @param {string} token - 用户token（可选，如果不传则从本地存储获取）
 * @returns {Promise}
 */
export function getUserInfo(token = null) {
	return new Promise((resolve, reject) => {
		// 如果没有传入token，从本地存储获取
		if (!token) {
			token = uni.getStorageSync('token');
		}
		
		if (!token) {
			reject(new Error('未找到token，请先登录'));
			return;
		}
		
		uni.request({
			url: `${config.AI_HTTP_REQUEST_URL}/auth/user-info`,
			method: 'GET',
			header: {
				'token': token
			},
			success: (res) => {
				if (res.statusCode === 200) {
					resolve(res.data)
				} else {
					reject(res)
				}
			},
			fail: (err) => {
				reject(err)
			}
		})
	})
}

/**
 * 刷新token
 * @param {string} token - 当前token（可选，如果不传则从本地存储获取）
 * @returns {Promise}
 */
export function refreshToken(token = null) {
	return new Promise((resolve, reject) => {
		// 如果没有传入token，从本地存储获取
		if (!token) {
			token = uni.getStorageSync('token');
		}
		
		if (!token) {
			reject(new Error('未找到token，请先登录'));
			return;
		}
		
		uni.request({
			url: `${config.AI_HTTP_REQUEST_URL}/auth/refresh-token`,
			method: 'POST',
			header: {
				'token': token
			},
			success: (res) => {
				if (res.statusCode === 200) {
					resolve(res.data)
				} else {
					reject(res)
				}
			},
			fail: (err) => {
				reject(err)
			}
		})
	})
}

/**
 * 退出登录
 * @param {string} token - 用户token（可选，如果不传则从本地存储获取）
 * @returns {Promise}
 */
export function logout(token = null) {
	return new Promise((resolve, reject) => {
		// 如果没有传入token，从本地存储获取
		if (!token) {
			token = uni.getStorageSync('token');
		}
		
		// 如果没有token，直接返回成功，表示本地退出
		if (!token) {
			resolve({
				code: 200,
				message: '本地退出成功'
			});
			return;
		}
		
		uni.request({
			url: `${config.AI_HTTP_REQUEST_URL}/auth/logout`,
			method: 'POST',
			header: {
				'token': token
			},
			success: (res) => {
				if (res.statusCode === 200) {
					resolve(res.data)
				} else {
					reject(res)
				}
			},
			fail: (err) => {
				reject(err)
			}
		})
	})
}

/**
 * 微信登录
 * @returns {Promise}
 */
export function wxLogin() {
	return new Promise((resolve, reject) => {
		console.log('开始获取微信登录code');
		const startTime = Date.now();
		
		uni.login({
			provider: 'weixin',
			timeout: 10000, // 10秒超时
			success: (res) => {
				const duration = Date.now() - startTime;
				console.log(`微信登录成功 (耗时${duration}ms):`, res);
				
				if (res.code) {
					resolve(res.code)
				} else {
					console.error('微信登录失败：未获取到code', res);
					reject(new Error('获取微信登录code失败，请重试'))
				}
			},
			fail: (err) => {
				const duration = Date.now() - startTime;
				console.error(`微信登录失败 (耗时${duration}ms):`, err);
				
				// 优化错误信息
				let errorMessage = '微信登录失败';
				if (err.errMsg) {
					if (err.errMsg.includes('timeout')) {
						errorMessage = '微信登录超时，请重试';
					} else if (err.errMsg.includes('cancel')) {
						errorMessage = '用户取消微信登录';
					} else if (err.errMsg.includes('fail')) {
						errorMessage = '微信登录失败，请检查网络';
					} else {
						errorMessage = `微信登录失败：${err.errMsg}`;
					}
				}
				
				reject(new Error(errorMessage));
			}
		})
	})
}

/**
 * 检查用户是否已登录
 * @returns {boolean} 是否已登录
 */
export function isLoggedIn() {
	// 检查本地存储中是否有token
	const token = uni.getStorageSync('token');
	console.log('isLoggedIn_token:', token);
	return !!token; // 转换为布尔值
}

/**
 * 保存登录信息到本地存储
 * @param {Object} loginInfo - 登录信息
 * @param {string} loginInfo.token - 用户token
 * @param {Object} loginInfo.user_info - 用户信息
 */
export function saveLoginInfo(loginInfo) {
	if (!loginInfo) return false;
	
	try {
		// 保存token
		if (loginInfo.token) {
			uni.setStorageSync('token', loginInfo.token);
		}
		
		// 保存用户信息
		if (loginInfo.user_info) {
			uni.setStorageSync('userInfo', loginInfo.user_info);
		}
		
		console.log('登录信息保存成功:', loginInfo);
		return true;
	} catch (error) {
		console.error('保存登录信息失败:', error);
		return false;
	}
}

 